package com.xigua._位或运算;

/**
 * @author LiRongHua
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: 一个整型数组 nums 里除两个数字之外，其他数字都出现了两次
 * 。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)，空间复杂度是O(1)。
 * @date 2022/3/2323:29
 */
public class _剑指Offer56_1_数组中数字出现的次数 {

    public static void main(String[] args) {
        singleNumbers(new int[]{3,4,4,5});
    }

    public static int[] singleNumbers(int[] nums) {
        int ret = 0;
        for (int n : nums) {
            ret ^= n;
        }
        int div = 1;
        while ((div & ret) == 0) {
            div <<= 1;
        }
        int a = 0, b = 0;
        for (int n : nums) {
            if ((div & n) != 0) {
                a ^= n;
            } else {
                b ^= n;
            }
        }
        return new int[]{a, b};
    }
}
